package com.glela.common.verify;

public class ValidationHandle {
	/**
	 * 必输
	 * 
	 * @param key 昵称
	 * @param paramValue 值
	 * @return
	 */
	public static String required(String key, String paramValue) {
		if (paramValue == null || "".equals(paramValue)) {
			return new StringBuilder().append(key).append("为必填").toString();
		}
		return null;
	}

	/**
	 * 是否是自然数
	 * 
	 * @param key 昵称
	 * @param paramValue 值
	 * @return
	 */
	public static String isNatural(String key, String paramValue) {
		if (paramValue == null) {
			return null;
		}
		if (paramValue.matches("\\d*")) {
			long l = Long.parseLong(paramValue);
			if (Long.valueOf(l) >= 0) {
				return null;
			}
		}
		return new StringBuilder().append(key).append("不是自然数").toString();
	}
	
	/**
	 * 时间判定
	 * @param key
	 * @param paramValue
	 * @return
	 */
	public static String isTime(String key, String paramValue){
		if (paramValue == null) {
			return null;
		}
		if (paramValue.matches("^([0-1]?[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$")) {
				return null;
		}
		return new StringBuilder().append(key).append("不是时间类型（HH:mm:ss）").toString();
	}

	/**
	 * 大于0的自然数
	 * 
	 * @param key 昵称
	 * @param paramValue 值
	 * @return
	 */
	public static String isNaturalNoZero(String key, String paramValue) {
		if (paramValue == null) {
			return null;
		}
		if (paramValue.matches("\\d*")) {
			long l = Long.parseLong(paramValue);
			if (Long.valueOf(l) > 0) {
				return null;
			}
		}
		return new StringBuilder().append(key).append("不是大于0的自然数").toString();
	}

	/**
	 * 必须为 paramValue位数
	 * 
	 * @param key 昵称
	 * @param paramValue 值
	 * @param ruleValue 长度
	 * @return
	 */
	public static String mustLength(String key, String paramValue, String ruleValue) {
		if (paramValue == null) {
			return null;
		}
		if (ruleValue.matches("\\d*")) {
			int must = Integer.parseInt(ruleValue);
			if (paramValue.length() == Integer.valueOf(must)) {
				return null;
			}
		} else {
			return new StringBuilder().append(key).append("长度必须为数字").toString();
		}
		return new StringBuilder().append(key).append("长度必须为").append(ruleValue).append("位").toString();
	}

	/**
	 * 最大位数
	 * 
	 * @param key 昵称
	 * @param paramValue 值
	 * @param ruleValue 长度
	 * @return
	 */
	public static String maxLength(String key, String paramValue, String ruleValue) {
		if (paramValue == null) {
			return null;
		}
		if (ruleValue.matches("\\d*")) {
			int max = Integer.parseInt(ruleValue);
			if (paramValue.length() <= Integer.valueOf(max)) {
				return null;
			}
		} else {
			return new StringBuilder().append(key).append("长度必须为数字").toString();
		}
		return new StringBuilder().append(key).append("长度不能大于").append(ruleValue).append("位").toString();
	}

	/**
	 * 最小位数
	 * 
	 * @param key 昵称
	 * @param paramValue 值
	 * @param ruleValue 长度
	 * @return
	 */
	public static String minLength(String key, String paramValue, String ruleValue) {
		if (paramValue == null) {
			return null;
		}
		if (ruleValue.matches("\\d*")) {
			int min = Integer.parseInt(ruleValue);
			if (paramValue.length() >= Integer.valueOf(min)) {
				return null;
			}
		} else {
			return new StringBuilder().append(key).append("长度必须为数字").toString();
		}
		return new StringBuilder().append(key).append("长度不能小于").append(ruleValue).append("位").toString();
	}

	/**
	 * 是否是手机号
	 * 
	 * @param key 昵称
	 * @param paramValue 值
	 * @return
	 */
	public static String isMobileNO(String key, String paramValue) {
		if (paramValue == null) {
			return null;
		}
		if (paramValue.matches("^1[345678]\\d{9}$")) {
			return null;
		}
		return new StringBuilder().append(key).append("不符合手机号格式").toString();
	}

	/**
	 * 排序方式
	 * 
	 * @param key
	 * @param paramValue
	 * @return
	 */
	public static String isOrder(String key, String paramValue) {
		if (paramValue == null) {
			return null;
		}
		// equalsIgnoreCase 区分大小写
		if (paramValue == null || "".equals(paramValue)) {
			return null;
		}
		if ("desc".equalsIgnoreCase(paramValue) || "asc".equalsIgnoreCase(paramValue)) {
			return null;
		}
		return new StringBuilder().append(key).append("只能为desc或者asc").toString();
	}

	/**
	 * 判断是否经纬度格式 用,分割 至少是2个数组
	 * 
	 * @param key
	 * @param paramValue
	 * @return
	 */
	public static String isLatAndLng(String key, String paramValue) {
		if (paramValue == null) {
			return null;
		}
		int i = paramValue.indexOf(",");
		if (i < 0) {
			return new StringBuilder().append(key).append("不符合经纬度,分割符").toString();
		}
		String[] centerArr = paramValue.split(",");
		if (centerArr.length < 2) {
			return new StringBuilder().append(key).append("请输入至少2个维度").toString();
		}
		// double 类型
		if (!centerArr[0].matches("^-?([1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*|0?\\.0+|0)$")) {
			return new StringBuilder().append(key).append("经度输入错误").toString();
		}
		if (!centerArr[1].matches("^-?([1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*|0?\\.0+|0)$")) {
			return new StringBuilder().append(key).append("纬度输入错误").toString();
		}
		return null;
	}

	/**
	 * paramValue中有且只有一个值不为空
	 * 
	 * @param key
	 * @param paramValue
	 * @return
	 */
	public static String isOneNotNull(String key, String paramValue) {
		int i = 0;
		String[] stringArr = paramValue.split(",");
		for (int j = 0; j < stringArr.length; j++) {
			if (stringArr[j] != null && !"".equals(stringArr[j]) && !"null".equals(stringArr[j])) {
				i++;
			}
		}
		if (i != 1) {
			return new StringBuilder().append(key).append("中有").append(i).append("个非空值").toString();
		}
		return null;
	}

	/**
	 * paramValue中的所有值都不为空
	 * 
	 * @param key
	 * @param paramValue
	 * @return
	 */
	public static String isNotNull(String key, String paramValue) {
		int i = 0;
		String[] stringArr = paramValue.split(",");
		for (int j = 0; j < stringArr.length; j++) {
			if (stringArr[j] != null && !"".equals(stringArr[j]) && !"null".equals(stringArr[j])) {
				i++;
			}
		}
		if (i == stringArr.length || i == 0) {
			return null;
		}
		return new StringBuilder().append(key).append("中有").append(stringArr.length - i).append("非空值").toString();

	}
	
	/**
	 * paramValue中有至少有一个一个值不为空
	 * 
	 * @param key
	 * @param paramValue
	 * @return
	 */
	public static String oneNotNull(String key, String paramValue) {
		int i = 0;
		String[] stringArr = paramValue.split(",");
		for (int j = 0; j < stringArr.length; j++) {
			if (stringArr[j] != null && !"".equals(stringArr[j]) && !"null".equals(stringArr[j])) {
				i++;
			}
		}
		if (i < 1) {
			return new StringBuilder().append(key).append("中有").append(i).append("个非空值").toString();
		}
		return null;
	}
}
